<?php

namespace Common\Model;

class UserTokenModel extends AllModel{
    /**
     * 检测该账号还能否继续登录[删除时会进行递归删除]
     *      该操作需要先检测用户的密码是否正确
     *      如果加入了验证码功能则还需要验证验证码操作
     * 
     * @param type $uid 用户UID编号
     * @param type $type 登录的设备类型
     * @param type $r_type 返回值类型
     * @return string string登录成功后的token值，false登录设备达到上限，0同类设备登录达到上限
     */
    public function create_token($uid,$type = 1){
        $number = C('API_CONF.all_user.number',NULL,1);
        if(C('API_CONF.all_user.device',NULL,FALSE)){
            $count = $this->where(array('type'=>$type,'uid'=>$uid))->count();
            // 如果允许多设备登录
            if(C('API_CONF.all_user.auto_clear',NULL,FALSE)){
                // 如果自动清除旧登录日志
                if($count >= $number){
                    // 如果登录条数已经达到上限
                    $id = $this->where(array('type'=>$type,'uid'=>$uid))->order('`id` ASC')->find();
                    // 把最早的一条登录记录清除
                    $this->where(array('id'=>$id['id']))->delete();
                    return $this->create_token($uid, $type);
                } else {
                    $token = pass(microtime());
                    $this->create_info(array(
                        'uid' => $uid,
                        'type' => $type,
                        'token' => $token
                    ));
                    return $token;
                }
            } else {
                // 如果不自动清除旧登录日志
                if($count >= $number){
                    return 0;
                } else {
                    $token = pass(microtime());
                    $this->create_info(array(
                        'uid' => $uid,
                        'type' => $type,
                        'token' => $token
                    ));
                    return $token;
                }
            }
        } else {
            // 如果不允许多设备登录[多个设备视为同一设备]
            $count = $this->where(array('uid'=>$uid))->count();
            if(C('API_CONF.all_user.auto_clear',NULL,FALSE)){
                // 如果自动清除旧登录日志
                if($count >= $number){
                    // 如果登录条数已经达到上限
                    $id = $this->where(array('uid'=>$uid))->order('`id` ASC')->find();
                    // 把最早的一条登录记录清除
                    $this->where(array('id'=>$id['id']))->delete();
                    return $this->create_token($uid, $type);
                } else {
                    $token = pass(microtime());
                    $this->create_info(array(
                        'uid' => $uid,
                        'type' => $type,
                        'token' => $token
                    ));
                    return $token;
                }
            } else {
                // 如果不自动清除旧登录日志
                if($count >= $number){
                    return FALSE;
                } else {
                    $token = pass(microtime());
                    $this->create_info(array(
                        'uid' => $uid,
                        'type' => $type,
                        'token' => $token
                    ));
                    return $token;
                }
            }
        }
        return pass(microtime());
    }
    
    /**
     * 检测token是否存在
     * 
     * @param string $token 要检测的token值
     * @param boolean $all 是否是要获取token的全部信息
     * @return boolean|number 对应的用户ID【false表示该token不存在】
     */
    public function check_token($token = '',$all = false){
        if(empty($token)){
            return FALSE;
        }
        $info = $this->where(array('token'=>$token))->find();
        if(empty($info) || !$info){
            return FALSE;
        }
        if($all){
            return $info;
        }
        return $info['uid'];
    }
}